<?php

include('../auth.php');

$name        =  $_GET['name'];
$group       =  $_GET['group'];

$sendByMail  =  $_GET['mail'];
$zipOutput   =  $_GET['zip'];
$pdfOutput   =  $_GET['pdf'];
$timeFrom    =  $_GET['timeFrom'];
$timeTo      =  $_GET['timeTo'];    

if( $_SESSION['AUTH_LEVEL'] >= 3 ) {
			include('../../config.php');
			
			require_once('./tcpdf/config/lang/ger.php');
			require_once('./tcpdf/tcpdf.php');
			include_once("pdfConcat.php");
			
			// * ** *************************************************** ** *
			//   Buchungen aus DB abrufen
			// * ** *************************************************** ** *
			
			mysql_connect($host,$username,$password);
			mysql_select_db($database);

			$productNames = mysql_query("SELECT * FROM produkte");

			// Liste mit den Produkten, geordnet nach ID
			$i = 1;
			while( $product = mysql_fetch_array($productNames) ) {
				$myProducts[$i++] = $product['Name'];
			}


			// * ** *************************************************** ** *
			//     Rechnung für alle Nutzer, Gruppen oder 
			//	   Einzelne	generieren
			// * ** *************************************************** ** *
			if( $group == 'ALL') {
				$allUsers = mysql_query("SELECT * FROM saufanten"); 
			} else if( $group == 'AHAH'){
				$allUsers = mysql_query("SELECT * FROM saufanten WHERE Status ='AH'"); 
			} else if( $group == 'ACTIVE'){
				$allUsers = mysql_query("SELECT * FROM saufanten  WHERE Status <>'AH'"); 
			} else if( $name != 'false'){
				$allUsers = mysql_query("SELECT * FROM saufanten WHERE name ='".$name."'"); 
			} else {
				echo('Fehler in der Parametereingabe');
				return;
			}
			
			// * ** *************************************************** ** *
			//        Gespeicherte Buchungen abrufen und in PDF listen,
			//        möglicher Mailversand
			// * ** *************************************************** ** *
			$i = 0;
			while($user = mysql_fetch_array($allUsers)) {
				$name = $user['name'] ;
				
				$request  = "SELECT * FROM buchungen  WHERE name = '".$name."' AND wann BETWEEN '".date("Y-m-d",strtotime($timeFrom))."' AND '".date("Y-m-d",strtotime($timeTo))."' ORDER BY wann DESC, konto ASC";
				
				$results  = bookingList($request);
				$accTotal        = mysql_query("SELECT kontostand FROM saufanten WHERE name = '".$name."'"); 
				list($accTotal)  = mysql_fetch_row($accTotal);
				
				$pdf = createNewDocument($name, ($timeFrom.' bis '.$timeTo));		
				$pdf->writeHTML(generateUserInvoice($results, $myProducts, $accTotal, $name), true, false, false, false, '');
				$pdf->Output('./tmp/'.$name.'.pdf', 'F');
				
				// Dateinamen speichern um sie später wieder zu verwenden 
				$fileNames[$i++] = './tmp/'.$name.'.pdf';
				
				// Wenn gewünscht als Mail versenden (nur wenn es Buchungen gibt)	
				if($sendByMail == 'true' && $accTotal < 0 ){
					$attachmentFile =  $fileNames[$i-1];
					$attachmentName = $timeFrom.'-'.$timeTo.'_Bierabrechnung_'.$name.'.pdf';
					$mailSubject    = 'Bierabrechnung: '. ($timeFrom.'-'.$timeTo);
					
					$done = sendMail($name,$attachmentFile,$attachmentName, $user['mail'], $mailSubject, $accTotal );
					
				}
			}
			
		
			// * ** *************************************************** ** *
			// Ausgabe in einer Datei, wahlweise PDF oder ZIP
			// * ** *************************************************** ** *		
			$outputFile = './tmp/'.$timeFrom.'-'.$timeTo.'_Bierabrechnungen';
			
			if($pdfOutput == 'true'){
				if (sizeof($fileNames) == 1) {
					$pdf->Output($timeFrom.'-'.$timeTo.'_Bierabrechnung_'.$name, "I");
				} else {
					// Als gesamte PDF ausgeben
					$pdfC =& new concat_pdf();
					$pdfC->setFiles($fileNames);
					$pdfC->concat();
					
					
					$pdfC->Output(outputFile, "I");
					
					// Dateien löschen
					foreach( $fileNames as $fileName) {
						unlink($fileName);
					}
				}
				
			} else if ($zipOutput == 'true') {
				// Als ZIP mit einzel PDFs ausgeben, hier nur temporäre Datei verwenden
				$zip = new ZipArchive();
						
				if ($zip->open($outputFile.'.zip', ZIPARCHIVE::OVERWRITE)!==TRUE) {
					exit("Fehler beim öffnen <$outputFile>\n");
				}
				
				foreach( $fileNames as $fileName) {
					$zip->addFile($fileName,mb_substr($fileName,6));
				}
				$zip->close();

				// Dateien löschen
				foreach( $fileNames as $fileName) {
					unlink($fileName);
				} 
				
				// TODO: das ZIP archiv muss noch gelöscht werden
				echo('<a href="'.$outputFile.'.zip"> Download:'.mb_substr($outputFile.'.zip' ,6).'</a>');
			} // end output methods
			
			  
} else {
	      // kein Zugriff gestattet
	      echo('Zugriff verweigert');
} // end Sicherheitsprüfung

function bookingList($requestStr) {
		$bookings = mysql_query($requestStr);
		
		while( $myBooking =  mysql_fetch_array($bookings) ) {
		  $results[] = $myBooking;
		}	   
		
		return $results;
} // end bookingList

function createNewDocument($name, $time) {
		// create new PDF document
		$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

		// set document information
		$pdf->SetCreator(PDF_CREATOR);
		$pdf->SetAuthor('Abrechnungssystem L! Preußen');
		$pdf->SetTitle('Getränkeabrechnung für Nutzer '.$name);
		//$pdf->SetPrintHeader(false);

		$pdf->SetHeaderData('', 0, 'Getränkeabrechnung für Nutzer '.$name, "Automatisch generiert für den Zeitraum:\n".$time);	
		
		// set header and footer fonts
		$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', 12));
		$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', 10));

		// set default monospaced font
		$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

		//set margins
		$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
		$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
		$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

		//set auto page breaks
		$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

		//set image scale factor
		$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

		//set some language-dependent strings
		$pdf->setLanguageArray($l);

		// set font
		$pdf->SetFont('helvetica', 'B', 20);

		// add a page
		$pdf->AddPage();
					
		$pdf->SetFont('helvetica', '', 8);
		
		return $pdf;
} // end createNewDocument

function generateUserInvoice($results,$myProducts, $accTotal, $name) {
			// * ** *************************************************** ** *
			//   Haupt und Untertitel schreiben
			// * ** *************************************************** ** *
			 /*$tbl  .= '<div><font size="+6"><b>Getränkeabrechnung für Nutzer '.$results[0]['name'].'</b></font><br/>
			                <font size="+4">Automatisch generiert für den Zeitraum: <br/>
							                24.05.2011 bis 24.6.2011<br>
							</font><hr>
					   </div>';
			 */
			if(floatval( $accTotal >= 0)) {
				 $tbl  .= '<div><font size="+4">Lieber '. $name.', Dein aktueller Kontostand liegt bei <font color="#00FF00">+'. $accTotal.'€</font></div>';
			} else {
				 $tbl  .= '<div><font size="+4">Lieber '. $name.', Dein aktueller Kontostand liegt bei <font color="#FF0000">'. $accTotal.'€</font><br>';
				 $tbl .= '<font size="-2" color ="#FF0000"><i>Bitte denke daran Dein Konto umgehend beim Fax auszugleichen!</i></font></div>'; 
			}
			
			if (sizeof($results) == 0){
				$tbl .= '<br/><br/><i> >> Keine Buchvorgänge im angegebenen Zeitraum. Ältere Buchungen können online eingesehen werden.</i>';
				return $tbl;
			}
			
			// * ** *************************************************** ** *
			//       Abrechnung auflisten                                            
			// * ** *************************************************** ** *
	
			// Kopfzeile der Tabelle
			$tbl .= '<table width="100%"> <tr><td><br><br>Die Übersicht der einzelnen Buchungen: <br></td></tr><tr> <td width="20%"><b>Datum - Zeit </b></td><td width="14%" align="left"><b>Was</b></td><td width="10%"><b>Buchung</b></td><td width="12%"><b>Konto</b></td><td width="20%"><b>Anmerkung</b></td></tr>';
			
			
			// Buchungstabelle bevölkern
			foreach($results as $myBooking) {
			   $productID = intval(  $myBooking['ID'] );
				$tbl .='<tr>';
						
						 // Zeit
						  $tbl .='<td width="20%">'.date("d.m.Y  - H:i",strtotime($myBooking['wann'])).'</td>';   
								  
						  // Produktbeschreibung 
						  if(  $productID == 0) {
								  $tbl .='<td width="14%" align="left"><font color="#00FF00">Gutschrift</font></td>';  
						  } else {
								  $tbl .='<td width="14%" align="left">'.$myProducts[ $productID] .'</td>';     
						  }   
						  
						  // Betrag
						  if(floatval($myBooking['booked'])>= 0) {
								  $tbl .='<td width="10%"><font color="#00FF00"  align="right">+'.$myBooking['booked'].'</font> &euro;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>';  
						  } else {
								  $tbl .='<td width="10%"><font color="#FF0000"  align="right">'.$myBooking['booked'].'</font> &euro;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>';  
						  }
						  
						  // Kontostand nach Buchung
						  $tbl .='<td width="12%"  align="right">'.$myBooking['konto'].' &euro;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>';  
								   
						  // Anmerkungen
						  $tbl .='<td width="100%" align="left"><font size="-2">'.$myBooking['anmerkung'].'</font></td>';                                                    
				 $tbl .='</tr>';	
			} // end for each
			$tbl .= '</table>';
			
			return $tbl;
}

function sendMail($name, $location, $file, $mail, $title, $acc){
    
	$empfaenger = $mail;   // Empfänger E-Mail Adresse
	$betreff    = $title;  // Betreff


	$id = md5(uniqid(time()));
	$dateiinhalt = fread(fopen($location, "r"), filesize($location));

	
	 // Absender Name und E-Mail Adresse
	$kopf = "From: Bierabrechnung Preussen <bier@preussen.net>\n";
	$kopf .= "MIME-Version: 1.0\n";
	$kopf .= "Content-Type: multipart/mixed; boundary=$id\n\n";
	$kopf .= "This is a multi-part message in MIME format\n";
	$kopf .= "--$id\n";
	$kopf .= "Content-Type: text/plain\n";
	$kopf .= "Content-Transfer-Encoding: 8bit\n\n";
	
	// Inhalt der E-Mail (Body)
	$kopf  .= "Lieber ".$name.",\n\n"; 
	$kopf  .= "im Anhang erhaelst Du die Bierrechnung fuer diesen Monat.\nDein Kontostand liegt momentan bei ".$acc." Euro.\n";
	$kopf  .= "Eine detaillierte Abrechnung findest Du im Anhang der Mail.\n"; 
	$kopf  .= "Bitte begleiche die offene Rechnungen beim Faxen:\n\n";
	$kopf  .= "Herr Peter Schenk\n"; 
	$kopf  .= "Telefon: 030 3640 9800\n"; 
	$kopf  .= "Mail: p.schenk@t-online.de\n\n"; 
	$kopf  .= "Bankverbidnung:\n"; 
	$kopf  .= "Kreissparkasse Hannover\n";
	$kopf  .= "Konto: 3107 562 807\n"; 
	$kopf  .= "Bankleitzahl:250 501 80\n\n"; 
	
	$kopf  .= "------------\n"; 
	$kopf  .= "Diese Email wurde automatisch vom Bierabrechnungssystem der L! Preussen generiert."; 
	
	
	$kopf .= "\n--$id";
	// Content-Type: image/gif, image/jpeg, image/png » MIME-Typen - selfHtml.org
	$kopf .= "\nContent-Type: application/pdf; name=$file\n";
	$kopf .= "Content-Transfer-Encoding: base64\n";
	$kopf .= "Content-Disposition: attachment; filename=$file\n\n";
	$kopf .= chunk_split(base64_encode($dateiinhalt));
	$kopf .= "\n--$id--";
	
	
	return mail($empfaenger, $betreff, "", $kopf); // E-Mail versenden
} // end sendMail